﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Espectaculos;
using Entidades.Espectaculos;
using System.Configuration;

public partial class Espectaculos_Gestion_frmRegistroProgramacion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            lblMensaje.Text = "Ingrese los datos del espectáculo.";
            cargarLocal();
            cargarCombos();

            if (!string.IsNullOrEmpty(Request.QueryString["fecha"]))
            {
                //cargar editar
                lblFecha.Text = Request.QueryString["fecha"].ToString();
            }


            if (!string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                //cargar editar
                int id = Convert.ToInt32(Request.QueryString["id"].ToString());
                hdIdEspectaculo.Value = id.ToString();
                cargarEspectaculo(id);

                cargarEspectaculoArtista(id);
                cargarEspectaculoRequisito(id);

                if (!string.IsNullOrEmpty(Request.QueryString["ref"]))
                {
                    //cargar editar
                    string refer = Request.QueryString["ref"].ToString();
                    if (refer == "reg")
                    {
                        lblMensaje.Text = "Se completó correctamente el registro nro : " + id.ToString();
                    }
                    else if (refer == "view")
                    {
                        lblMensaje.Text = "Está viendo el registro nro. : " + id.ToString();

                        pnlEspecArtsBody.Enabled = false;

                        pnlReqBody.Enabled = false;

                        txtnombre.Enabled = false;
                        txtDescripcion.Enabled = false;

                        ddlEstado.Enabled = false;

                        ibtnGrabar.Enabled = false;

                    }
                    else if (refer == "edit")
                    {
                        lblMensaje.Text = "Está editando el registro nro. : " + id.ToString();
                    }

                }
            }
            else
            {
                pnlEspecArtsBody.Visible = false;
                pnlEspecArts.Visible = false;

                pnlReqBody.Visible = false;
                pnlReq.Visible = false;
                //cpeArts.Enabled = false;
            }
        }

    }

    protected void ddlTipo_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (Page.AutoPostBackControl == ddlTipo)
            {
                int idTipo = 0;
                int.TryParse(ddlTipo.SelectedValue, out idTipo);
                Util.cargarSubtipo(ddlSubtipo, idTipo);
                Util.agregarSeleccionCombo(ddlSubtipo, "--Todos--");
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    //CABECERA

    protected void ibtnGrabar_Click(object sender, EventArgs e)
    {
        try
        {

            DateTime FechaPrograma = DateTime.Now;

            DateTime.TryParse(lblFecha.Text, out FechaPrograma);
            EspEspectaculo obj = new EspEspectaculo();
            obj.Nombre = txtnombre.Text;
            obj.Descripcion = txtDescripcion.Text;
            obj.Fecha = FechaPrograma;
            obj.IdEstado = Convert.ToInt32(ddlEstado.SelectedValue);
            obj.IdLocal = Convert.ToInt32(hdIdLocal.Value);

            int idEspectaculo = Convert.ToInt32(hdIdEspectaculo.Value);
            if (idEspectaculo == 0)
            {
                idEspectaculo = EspEspectaculoBLL.AgregarEspectaculo(obj);
                if (idEspectaculo > 0)
                {
                    Response.Redirect("frmRegistroProgramacion.aspx?id=" + idEspectaculo.ToString() + "&ref=reg");
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);
                }
            }
            else
            {
                int result = EspEspectaculoBLL.ModificarEspectaculo(obj);

                if (idEspectaculo > 0)
                {
                    Response.Redirect("frmRegistroProgramacion.aspx?id=" + idEspectaculo.ToString() + "&ref=reg");
                }
                else
                {
                    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);
                }
            }
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }

    #region CARGA DE DATOS

    
    private void cargarEstado()
    {

        List<EspEstado> lista = EspEstadoBLL.ListarEstado(1);
        ddlEstado.DataSource = lista;
        ddlEstado.DataTextField = "Descripcion";
        ddlEstado.DataValueField = "IdEstado";
        ddlEstado.DataBind();
        //agregarSeleccionCombo(ddlEstado);
    }

    private void cargarHora()
    {
        for (int i = 0; i <= 23; i++)
        {
            ListItem item = new ListItem();
            item.Value = (i).ToString().PadLeft(2, '0');
            item.Text = (i).ToString().PadLeft(2, '0');
            ddlHora.Items.Insert(i, item);
        }
    }

    private void cargarCombos()
    {
        Util.cargarTipo(ddlTipo);
        Util.cargarRepresentante(ddlRepresentante);
        cargarHora();
        cargarMinuto();
        cargarEstado();
        Util.agregarSeleccionCombo(ddlTipo, "--Todos--");
        Util.agregarSeleccionCombo(ddlSubtipo, "--Todos--");
        Util.agregarSeleccionCombo(ddlRepresentante, "--Todos--");
    }

    private void cargarMinuto()
    {
        for (int i = 0; i <= 59; i++)
        {
            ListItem item = new ListItem();
            item.Value = (i).ToString().PadLeft(2, '0');
            item.Text = (i).ToString().PadLeft(2, '0');
            ddlMinuto.Items.Insert(i, item);
        }
    }

    private void cargarLocal()
    {
        hdIdLocal.Value = ConfigurationManager.AppSettings["idLocal"].ToString();
        lblLocal.Text = ConfigurationManager.AppSettings["valLocal"].ToString();
    }

    private void cargarArtista(int idSubTipo, int estado, int idRep, int idTipo,string nombre)
    {
        List<EspArtista> lista = EspArtistaBLL.ListarArtista(idSubTipo, estado, idRep, idTipo, nombre);
        if (lista.Count==0)
        {
            grvArts.EmptyDataText = "No se encontraron registros.";
        }
        grvArts.DataSource = lista;
        grvArts.DataBind();

    }

    private void cargarEspectaculo(int id)
    {
        EspEspectaculo obj = new EspEspectaculo();

        obj = EspEspectaculoBLL.ObtenerEspectaculo(id);

        txtnombre.Text = obj.Nombre;
        txtDescripcion.Text = obj.Descripcion;
        ddlEstado.SelectedValue = obj.IdEstado.ToString();
        lblFecha.Text = obj.Fecha.ToShortDateString();
        lblLocal.Text = obj.Local;
        ddlEstado.SelectedValue = obj.IdEstado.ToString();

        //

    }

    private void cargarEspectaculoArtista(int IdEspectaculo)
    {
        grvArtista.DataSource = EspEspectaculoBLL.ListarEspectaculoArtista(IdEspectaculo);
        grvArtista.DataBind();
    }

    private void cargarEspectaculoRequisito(int IdEspectaculo)
    {
        grvReq.DataSource = EspEspectaculoBLL.ListarEspectaculoRequisito(IdEspectaculo);
        grvReq.DataBind();
    }

    #endregion

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("frmProgramacion.aspx");
    }

    //protected void ddlRepresentante_SelectedIndexChanged(object sender, EventArgs e)
    //{
    //    try
    //    {
    //        if (Page.AutoPostBackControl == ddlRepresentante)
    //        {
    //            int idRep = 0;
    //            int.TryParse(ddlRepresentante.SelectedValue, out idRep);
    //            int idSubTipo = 0;
    //            int.TryParse(ddlSubtipo.SelectedValue, out idSubTipo);
    //            //cargarArtista(idSubTipo,1, idRep);
    //        }
    //    }
    //    catch (Exception ex)
    //    {
    //        throw ex;
    //    }
    //}

    //protected void ddlSubtipo_SelectedIndexChanged(object sender, EventArgs e)
    //{
    //    try
    //    {
    //        if (Page.AutoPostBackControl == ddlSubtipo)
    //        {
    //            int idRep = 0;
    //            int.TryParse(ddlRepresentante.SelectedValue, out idRep);
    //            int idSubTipo = 0;
    //            int.TryParse(ddlSubtipo.SelectedValue, out idSubTipo);
    //            cargarArtista(idSubTipo,1, idRep);
    //        }
    //    }
    //    catch (Exception ex)
    //    {
    //        throw ex;
    //    }
    //}

    protected void btnAgregarArt_Click(object sender, EventArgs e)
    {
        try
        {
            int IdEspectaculo, IdArtista, Duracion = 0;
            DateTime HoraInicio = DateTime.MinValue;
            int.TryParse(hdIdEspectaculo.Value, out IdEspectaculo);
            int.TryParse(hdIdArtista.Value, out IdArtista);
            int.TryParse(txtDuracion.Text, out Duracion);
            DateTime.TryParse(lblFecha.Text, out HoraInicio);

            HoraInicio = HoraInicio.AddHours(Convert.ToDouble(ddlHora.SelectedValue));
            HoraInicio = HoraInicio.AddMinutes(Convert.ToDouble(ddlMinuto.SelectedValue));

            int result = EspEspectaculoBLL.AgregarEspectaculoArtista(IdEspectaculo, IdArtista, HoraInicio, Duracion);

            if (result > 0)
            {
                //hdIdArtista.Value = "-1";
                //txtArtista.Text = "";
                //txtDuracion.Text = "";

                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "resetControlArtista();", true);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se completó correctamente.');", true);

            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);

            }

            cargarEspectaculoArtista(IdEspectaculo);


        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void ibtnEliminarArt_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            ImageButton ibtnEliminarArt = (ImageButton)sender;
            int index = Convert.ToInt32(ibtnEliminarArt.CommandArgument);
            int IdEspectaculo = Convert.ToInt32(grvArtista.DataKeys[index].Values["IdEspectaculo"].ToString());
            int IdArtista = Convert.ToInt32(grvArtista.DataKeys[index].Values["IdArtista"].ToString());

            int result = EspEspectaculoBLL.EliminarEspectaculoArtista(IdEspectaculo, IdArtista);
            if (result > 0)
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se completó correctamente.')", true);
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);
            }

            cargarEspectaculoArtista(IdEspectaculo);

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void grvArtista_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
        {
            ImageButton ibtnEliminarArt = (ImageButton)e.Row.FindControl("ibtnEliminarArt");
            ibtnEliminarArt.CommandArgument = e.Row.RowIndex.ToString();
        }
    }

    protected void grvArts_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
        {
            LinkButton lnkArtista = (LinkButton)e.Row.FindControl("lnkArtista");
            string idArtista = DataBinder.GetPropertyValue(e.Row.DataItem, "IdArtista").ToString();
            string nombre = DataBinder.GetPropertyValue(e.Row.DataItem, "Nombre").ToString();

            lnkArtista.Text = nombre;
            lnkArtista.OnClientClick = "seleccionarArtista('" + nombre + "','" + idArtista + "')";
        }
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        try
        {
            int idRep = 0;
            int.TryParse(ddlRepresentante.SelectedValue, out idRep);
            int idSubTipo = 0;
            int.TryParse(ddlSubtipo.SelectedValue, out idSubTipo);
            int idTipo = 0;
            int.TryParse(ddlTipo.SelectedValue, out idTipo);
            string nombre = txtNombreArtista.Text.Trim();
            cargarArtista(idSubTipo, 1, idRep, idTipo, nombre);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void grvReq_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
        {
            ImageButton ibtnEliminarReq = (ImageButton)e.Row.FindControl("ibtnEliminarReq");
            ibtnEliminarReq.CommandArgument = e.Row.RowIndex.ToString();
        }
    }

    protected void ibtnEliminarReq_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            ImageButton ibtnEliminarReq = (ImageButton)sender;
            int index = Convert.ToInt32(ibtnEliminarReq.CommandArgument);
            int IdEspectaculo = Convert.ToInt32(grvReq.DataKeys[index].Values["IdEspectaculo"].ToString());
            int IdRequisito = Convert.ToInt32(grvReq.DataKeys[index].Values["IdRequisito"].ToString());

            int result = EspEspectaculoBLL.EliminarEspectaculoRequisito(IdRequisito);
            if (result > 0)
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se completó correctamente.')", true);
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);
            }

            cargarEspectaculoRequisito(IdEspectaculo);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void btnAgregarReq_Click(object sender, EventArgs e)
    {
        try
        {
            int IdEspectaculo = 0;
            int.TryParse(hdIdEspectaculo.Value, out IdEspectaculo);
            int result = EspEspectaculoBLL.AgregarEspectaculoRequisito(IdEspectaculo, txtDescripcionReq.Text, txtCantidad.Text);

            txtDescripcionReq.Text = "";
            txtCantidad.Text = "";
            if (result > 0)
            {
                txtDescripcionReq.Text = "";
                txtCantidad.Text = "";
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "resetControlReq();", true);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se completó correctamente.');", true);
                
            }
            else
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);

            }

            cargarEspectaculoRequisito(IdEspectaculo);


        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void imgBuscarArtista_Click(object sender, ImageClickEventArgs e)
    {
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "resetControl()", true);
        grvArts.EmptyDataText = "";
        grvArts.DataSource = null;
        grvArts.DataBind();

        mpeProgView.Show();
    }

   
}